Modified on 2013-FEB-22
Chel Hee Lee
R 메시지의 한국어 지원 작업지침 및 품질관리 검증 프로그램
iHELP 프로젝트에서 R 메시지에 대한 한국어 지원 작업은 영어로 된 R을 한국어 사용자가 모국어로서 편리하고 더 빠른 작업을 돕기 위한 환경을 제공하기 위한 하나의 옵션을 제공하는 것입니다. 따라서 올바르고 정확한 메시지 번역이 요구되어 집니다 . R의 한국어 지원은 초기에 잠시 이루어졌다가 아쉽게도 R-2.8.x 버전까지 관리의 부재로 인하여 많은 기계적 퍼지가 누적되어 한국어버전의 R을 사용하는데 많은 어려움이 있다는 문제점이 제기되어 왓습니다. 이러한 문제를 해결하기 위하여 R-2.9.x 부터 R-2.14.x까지 R에서 사용되는 한국어 용어에 대한 데이터 베이스 구축과 번역된 메시지들에 대해서 품질관리 검증 프로그램이 진행되었습니다. 그리고 R-3.0.0 부터는 기존의 퍼지를 모두 제거하기 위하여 언어파일 전체를 모두 초기화한뒤 올바르게 검증된 메시지들만 추가하여 배포됩니다 (R-3.0.0 부터의 모든 작업 진행사항은 ihelp-translators 메일링 리스트와 알카이브를 이용하여 그 내용을 확인하시길 부탁드리며, 아래의 품질관리에 대한 설명을 참고부탁드립니다).
기본방침
메시지들에 대한 품질관리는 기본적으로 언어파일 초기화 이후 모든 메시지를 소스코드내에서 확인 및 검토작업을 한뒤, R의 도움말 파일과 함께 그 사용의 여부가 일치하는가에 대한 검증 작업을 거치게 됩니다. 이렇게 메시지의 품질이 확인이 된 것들만이 R 한국어 버전에 포함되게 됩니다.
작업세부 지침
이 작업지침은 R(≥3.0.0) 부터 적용되며, 그 이전 버전들인 R(≤ 2.15.3)에는 적용되지 않고, 무시되어집니다 (ihelp-translators 메일링 리스트를 참고하세요). 총 24개의 작업도메인 (현재 2013년 2월 18일)이 있으나, 그 중에서 기본인 base 패키지를 예를 들어 설명합니다.
- 관련 소스트리를 iHELP 프로젝트로부터 다운받고, 아래의 경로로 들어갑니다.
cd /src/library/base/po/
-
ko.po라는 파일을 열어봅니다. 복잡해 보일 수도 있으나, 다음과 같이 간단한 형식을 가지고 있음을 확인할 수 있습니다.msgid "영어로 된 본래의 메시지가 있습니다" msgstr ""
한국어 파일 (현재 2013년 2월 18일)은 초기화 되어 있기 때문에 msgstr 부분은 아무런 메시지도 없이 "" 라고 되어 있습니다 (이는 R-3.0.0 버전부터 가장 올바른 한국어 지원을 하기 위함입니다 ihelp-translators 알카이브를 확인하세요). 이러한 작업을 위해서 Fedora 그룹에서는 poEdit 이라는 소프트웨어를 추천합니다. 모든 작업파일은 UTF-8 인코딩으로 되어 있어야 합니다. 우리는GNU gettext를 이용합니다. - msgid 에 있는 영어원문에 해당하는 올바른 한국어 번역을 위하여 조금더 구체적인 설명을 합니다.
ko.po파일의 맨 처음 두가지 메시지를 보도록 합니다.msgid "REPORT must be > 0 (method = \"BFGS\")" msgstr ""
msgid "unknown 'type' in \"CG\" method of 'optim'" msgstr ""
메시지들을 보고 바로 단순직역을 할 수도 있지만, 이러한 과정은 피해주시길 바랍니다 (이러한 메시지들이 발견이 되면 통보없이 삭제됩니다). 실제로 위의 메시지들은 최적화와 관련된 메시지로 R에서는optim()이라는 함수와 연관이 있습니다. 그리고, R은optim.c이라는 C 언어로 작성된 코드를 이용하여 이를 수행합니다. 따라서,optim.c소스코드를 열어보니다./* * R : A Computer Language for Statistical Data Analysis * Copyright (C) 1999-2012 The R Core Team (필요하지 않으므로 중간부분 생략) * You should have received a copy of the GNU General Public License * along with this program; if not, a copy is available at * http://www.r-project.org/Licenses/ */ (중요하지 않으므로 생략) #include
소스코드의 136번째 라인으로부터 첫번째 메시지를 확인할 수가 있습니다. 이때 단순히 "REPORT는 > 0"이라고 하거나 "REPORT는 0보다 커야 합니다" 라는 단순번역은 피해 주시길 부탁드립니다. 저 옆에 method 라는 것은 R 함수#include /* for the random number generation in samin() */ #include #include /* for Rprintf */ (중요하지 않으므로 생략) void vmmin(int n0, double *b, double *Fmin, optimfn fminfn, optimgr fmingr, int maxit, int trace, int *mask, double abstol, double reltol, int nREPORT, void *ex, int *fncount, int *grcount, int *fail) { (중요하지 않지만, 여기부터 코드를 잘 읽어야 함) if (nREPORT <= 0) (136번째 줄) error(_("REPORT must be > 0 (method = \"BFGS\")")); l = (int *) R_alloc(n0, sizeof(int)); n = 0; optim()의 입력인자입니다.R > args(optim) function (par, fn, gr = NULL, ..., method = c("Nelder-Mead", "BFGS", "CG", "L-BFGS-B", "SANN", "Brent"), lower = -Inf, upper = Inf, control = list(), hessian = FALSE) NULL따라서, 첫번째 메시지는 메시지는 아래와 같이 번역되어야 합니다.msgid "REPORT must be > 0 (method = \"BFGS\")" msgstr "method 에 \"BFGS\" 가 주어졌을때, REPORT 는 반드시 0 보다 큰 값이어야 합니다"
그럼, 두번째 메시지에 대해서 살펴봅니다. 이를 위해서는 R의optim()의 도움말을 더 읽어보시고, 소스코드를 한 번 주의깊게 보아주세요.void cgmin(int n, double *Bvec, double *X, double *Fmin, optimfn fminfn, optimgr fmingr, int *fail, double abstol, double intol, void *ex, int type, int trace, int *fncount, int *grcount, int maxit) { (별로 중요하지 않으니 생략) if (trace) { Rprintf(" Conjugate gradients function minimizer\n"); switch (type) { case 1: Rprintf("Method: Fletcher Reeves\n"); break; case 2: Rprintf("Method: Polak Ribiere\n"); break; case 3: Rprintf("Method: Beale Sorenson\n"); break; default: (489번째 줄) error(_("unknown 'type' in \"CG\" method of 'optim'")); }이 메시지는optim.c에서 498번째 라인에서 확인이 가능합니다. 그리고 R의 도움말에는'type'에 대해서 아래와 같이 기록되어 있습니다.‘type’ for the conjugate-gradients method. Takes value ‘1’ for the Fletcher-Reeves update, ‘2’ for Polak-Ribiere and ‘3’ for Beale-Sorenson.따라서, 이 메시지는 아래와 같이 번역이 되어야 합니다.msgid "unknown 'type' in \"CG\" method of 'optim'" msgstr "'optim'에서 사용하는 method 옵션 중 \"CG\" 에서는 정해지지 않은 'type' 입니다 "
모든 메시지는 퀄리티 향상 (Quality Improvement) 프로그램에 의하여 확인되고 검정이 되고 있으나, R을 사용하시면서 현재 번역되어 있는 메시지들 중 오탈자, 좀 더 의미 있는 표현, 그리고, 더 나은 표현을 제안하고자 하시는 사용자님들께서는 망설임없이 gnustats@korea.gnu.org 로 그 내용을 보내주시면 다음 배포판에 정정 및 수정이 반영되게 됩니다
다음은 메시지 번역에 있어서 기술적으로 주의해야 할 점과 도움이 되는 테크닉입니다.
번역 용어 대조표
| 영문 | 추천 용어 | 상황에 따라서 다음을 제안 |
| type | 타입 | 유형, 종류 |
| file association | 파일결합 | |
| candidate point | 후보점 | |
| argument | 인자 | |
| child process | ||
| pipe connection | ||
| session elpased time limit | 세션 경과 시간 제한 | |
| RNG | ||
| seed | ||
| load table | 로드테이블 | |
| non-conformable array | ||